// GruppeOversigtForm.cpp : implementation file
//

#include "stdafx.h"
#include "EBASApp.h"
#include "GruppeOversigtForm.h"
#include "ValgStuderende.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGruppeOversigtForm

IMPLEMENT_DYNCREATE(CGruppeOversigtForm, CFormView)

CGruppeOversigtForm::CGruppeOversigtForm()
	: CFormView(CGruppeOversigtForm::IDD)
{
	//{{AFX_DATA_INIT(CGruppeOversigtForm)
	m_sted = _T("");
	m_bemaerkning = _T("");
	m_navn = _T("");
	m_startTid = 0;
	m_slutTid = 0;
	//}}AFX_DATA_INIT

	m_curGruppe = NULL;
	m_EnumGruppe = NULL;
	m_EnumEjerforhold = NULL;
}

CGruppeOversigtForm::~CGruppeOversigtForm()
{
	m_curGruppe = NULL;
	m_EnumGruppe = NULL;
	m_EnumEjerforhold = NULL;
}

void CGruppeOversigtForm::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGruppeOversigtForm)
	DDX_Control(pDX, IDC_LIST_GRUPPEOVERSIGT_MEDLEMMER, m_medlemmer);
	DDX_Control(pDX, IDC_LIST_GRUPPEOVERSIGT_LISTE, m_grupper);
	DDX_Control(pDX, IDC_COMBO_OPRETGRUPPE_EJERFORHOLD, m_ejerforhold);
	DDX_Text(pDX, IDC_EDIT_OPRETGRUPPE_STED, m_sted);
	DDX_Text(pDX, IDC_EDIT_OPRETGRUPPE_BEMAERKNING, m_bemaerkning);
	DDX_Text(pDX, IDC_EDIT_OPRETGRUPPE_NAVN, m_navn);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_OPRETGRP_STARTTID, m_startTid);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_OPRETGRP_SLUTTID, m_slutTid);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CGruppeOversigtForm, CFormView)
	//{{AFX_MSG_MAP(CGruppeOversigtForm)
	ON_BN_CLICKED(IDC_BUTTON_GRPOVERSIGT_FJERNMEDLEM, OnButtonGrpoversigtFjernmedlem)
	ON_LBN_DBLCLK(IDC_LIST_GRUPPEOVERSIGT_LISTE, OnDblclkListGruppeoversigtListe)
	ON_BN_CLICKED(IDC_BUTTON_GRPOVERSIGT_TILFOEJ_MEDLEM, OnButtonGrpoversigtTilfoejMedlem)
	ON_BN_CLICKED(IDC_BUTTON_GRPOVERSIGT_RET, OnButtonGrpoversigtRet)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGruppeOversigtForm diagnostics

#ifdef _DEBUG
void CGruppeOversigtForm::AssertValid() const
{
	CFormView::AssertValid();
}

void CGruppeOversigtForm::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CGruppeOversigtForm message handlers

void CGruppeOversigtForm::OnButtonGrpoversigtFjernmedlem() 
{
	UpdateData();

	try {
		int sel = m_medlemmer.GetCurSel();

		CString s, cpr;
		m_medlemmer.GetText(sel, s);
		int pos = s.Find("*");
		for (int p=0; p<pos-1; p++)
			cpr += CString(s.GetAt(p));

		EBASDLLLib::IStuderendePtr pStud = NULL;
		IUnknown * pUnk = NULL; ULONG fetched = 0;
		EBASDLLLib::IEnumStuderendePtr pEnumStud;
		pEnumStud.CreateInstance(__uuidof(EBASDLLLib::EnumStuderende));
		pStud = pEnumStud->findStuderende(bstr_t(cpr));
		if (NULL != pStud) {
			m_curGruppe->FjernMedlem(pStud);
			pStud = NULL;

			m_medlemmer.DeleteString(sel);
		}
	} catch (...) {

	}
	
	UpdateData(FALSE);
}

void CGruppeOversigtForm::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	try {
		if (NULL == m_EnumGruppe)
			m_EnumGruppe.CreateInstance(__uuidof(EBASDLLLib::EnumGruppe));
		else
			m_EnumGruppe->Reset();

		IUnknown * pUnk = NULL; ULONG fetched = 0;
		m_EnumGruppe->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IGruppePtr pGruppe = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IGruppe), (void**)&pGruppe);
			pUnk = NULL;

			m_grupper.AddString(pGruppe->Navn);
			
			pGruppe = NULL;

			m_EnumGruppe->Next(&pUnk, &fetched);
		}


		bstr_t navn;
		pUnk = NULL; fetched = 0;		
		EBASDLLLib::IEnumEjerforholdPtr pEnumEjerforhold;
		pEnumEjerforhold.CreateInstance(__uuidof(EBASDLLLib::EnumEjerforhold));
		pEnumEjerforhold->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IEjerforholdPtr pEjerforhold = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IEjerforhold), (void**)&pEjerforhold);
			pUnk = NULL;

			EBASDLLLib::IAdressePtr pAdresse = NULL;
			pAdresse = pEjerforhold->Adresse;
			navn = pAdresse->Attention;
			m_ejerforhold.AddString(navn);

			pAdresse = NULL;
			pEjerforhold = NULL;

			pEnumEjerforhold->Next(&pUnk, &fetched);
		}
		m_ejerforhold.SetCurSel(-1);
	} catch (...) {

	}

	UpdateData(FALSE);
}

void CGruppeOversigtForm::OnDblclkListGruppeoversigtListe() 
{
	UpdateData();

	try {
		CButton * btm_add = (CButton *)GetDlgItem(IDC_BUTTON_GRPOVERSIGT_TILFOEJ_MEDLEM);
		btm_add->EnableWindow();
		CButton * btm_remove = (CButton *)GetDlgItem(IDC_BUTTON_GRPOVERSIGT_FJERNMEDLEM);
		btm_remove->EnableWindow();

		CString navn, holder;
		int sel = m_grupper.GetCurSel();
		m_grupper.GetText(sel, navn);

		m_curGruppe = m_EnumGruppe->findGruppeNavn(bstr_t(navn));
		if (NULL == m_curGruppe)
			MessageBox("Gruppe ikke fundet", "Information");

		m_navn = (char*)m_curGruppe->Navn;
		m_sted = (char*)m_curGruppe->Sted;
		m_bemaerkning = (char*)m_curGruppe->Bemaerkning;
		holder = (char*)m_curGruppe->StartTid;
		m_startTid = StringToTime(holder);
		holder = (char*)m_curGruppe->SlutTid;
		m_slutTid = StringToTime(holder);

		if (NULL == m_EnumEjerforhold)
			m_EnumEjerforhold.CreateInstance(__uuidof(EBASDLLLib::EnumEjerforhold));
		else
			m_EnumEjerforhold->Reset();

		EBASDLLLib::IEjerforholdPtr pEjerforhold = NULL;
		pEjerforhold = m_EnumEjerforhold->findEjerforholdGuid(m_curGruppe->Ejerforhold);
		if (NULL != pEjerforhold) {
			EBASDLLLib::IAdressePtr pAdresse = NULL;
			pAdresse = pEjerforhold->Adresse;
			if (NULL != pAdresse) {
				CString t = (char*)pAdresse->Attention;

				int pos = m_ejerforhold.FindString(-1, t);
				m_ejerforhold.SetCurSel(pos);
				
				pAdresse = NULL;
				pEjerforhold = NULL;
			} 
		}

		m_medlemmer.ResetContent();

		IUnknown * pUnk = NULL; ULONG fetched = 0;
		EBASDLLLib::IEnumStuderendePtr pEnumStud;
		pEnumStud.CreateInstance(__uuidof(EBASDLLLib::EnumStuderende));
		pEnumStud = m_curGruppe->Medlemmer;
		pEnumStud->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IStuderendePtr pStud = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IStuderende), (void**)&pStud);
			pUnk = NULL;

			m_medlemmer.AddString(
				CString((char*)pStud->CPRNr) + " * " + 
				CString((char*)pStud->Fornavn) + " " + 
				CString((char*)pStud->Efternavn) );

			pEnumStud->Next(&pUnk, &fetched);
		}

	} catch (...) {
		// MessageBox(CEBASAppApp::gpEbas->LastError);
	}

	UpdateData(FALSE);
}

void CGruppeOversigtForm::OnButtonGrpoversigtTilfoejMedlem() 
{
	UpdateData();

	try {
		CValgStuderende * valg = new CValgStuderende;
		if (IDOK == valg->DoModal()) {
			CString * arr = valg->get_ValgteCprNr();
			int antal = valg->get_Antal();

			EBASDLLLib::IEnumStuderendePtr pEnumStud;
			pEnumStud.CreateInstance(__uuidof(EBASDLLLib::EnumStuderende));
			
			for (int i=0; i<antal; i++) {
				
				EBASDLLLib::IStuderendePtr pStud = NULL;
				pStud = pEnumStud->findStuderende(bstr_t(arr[i]));
				
				m_curGruppe->TilfoejMedlem(pStud);

				m_medlemmer.AddString(
						CString((char*)pStud->CPRNr) + " * " + 
						CString((char*)pStud->Fornavn) + " " + 
						CString((char*)pStud->Efternavn) );

				pStud = NULL;
			}

		}
		valg->DestroyWindow();
	} catch (...) {
		// MessageBox(CEBASAppApp::gpEbas->LastError);
	}

	UpdateData(FALSE);
}

void CGruppeOversigtForm::OnGem()
{
	CString holder;

	UpdateData();

	try {
		if (NULL == m_curGruppe)
			return;
		
		m_curGruppe->Bemaerkning = bstr_t(m_bemaerkning);
		m_curGruppe->Ejerforhold = bstr_t(m_navn);
		m_curGruppe->Sted = bstr_t(m_sted);

		holder = m_startTid.Format("%Y-%m-%d");
		m_curGruppe->StartTid = bstr_t(holder);
		holder = m_slutTid.Format("%Y-%m-%d");
		m_curGruppe->SlutTid = bstr_t(holder);

		int sel = m_ejerforhold.GetCurSel();
		m_ejerforhold.GetLBText(sel, holder);
		m_curGruppe->Ejerforhold = bstr_t(holder);

		m_curGruppe->SetInfo();

		CEdit * editbox;
		editbox = (CEdit *)GetDlgItem(IDC_EDIT_OPRETGRUPPE_NAVN);
		editbox->EnableWindow(FALSE);
		editbox = (CEdit *)GetDlgItem(IDC_EDIT_OPRETGRUPPE_STED);
		editbox->EnableWindow(FALSE);
		editbox = (CEdit *)GetDlgItem(IDC_EDIT_OPRETGRUPPE_BEMAERKNING);
		editbox->EnableWindow(FALSE);

		CComboBox * combo;
		combo = (CComboBox *)GetDlgItem(IDC_COMBO_OPRETGRUPPE_EJERFORHOLD);
		combo->EnableWindow(FALSE);

		CDateTimeCtrl * picker;
		picker = (CDateTimeCtrl *)GetDlgItem(IDC_DATETIMEPICKER_OPRETGRP_STARTTID);
		picker->EnableWindow(FALSE);
		picker = (CDateTimeCtrl *)GetDlgItem(IDC_DATETIMEPICKER_OPRETGRP_SLUTTID);
		picker->EnableWindow(FALSE);

		CButton * btn;
		btn = (CButton *)GetDlgItem(IDC_BUTTON_GRPOVERSIGT_RET);
		btn->EnableWindow(TRUE);
	} catch (...) {

	}
}

void CGruppeOversigtForm::OnButtonGrpoversigtRet() 
{
	int sel = m_grupper.GetCurSel();
	if (-1 == sel || NULL == m_curGruppe)
		return;

	CEdit * editbox;
	editbox = (CEdit *)GetDlgItem(IDC_EDIT_OPRETGRUPPE_NAVN);
	editbox->EnableWindow();
	editbox = (CEdit *)GetDlgItem(IDC_EDIT_OPRETGRUPPE_STED);
	editbox->EnableWindow();
	editbox = (CEdit *)GetDlgItem(IDC_EDIT_OPRETGRUPPE_BEMAERKNING);
	editbox->EnableWindow();

	CComboBox * combo;
	combo = (CComboBox *)GetDlgItem(IDC_COMBO_OPRETGRUPPE_EJERFORHOLD);
	combo->EnableWindow();

	CDateTimeCtrl * picker;
	picker = (CDateTimeCtrl *)GetDlgItem(IDC_DATETIMEPICKER_OPRETGRP_STARTTID);
	picker->EnableWindow();
	picker = (CDateTimeCtrl *)GetDlgItem(IDC_DATETIMEPICKER_OPRETGRP_SLUTTID);
	picker->EnableWindow();

	CButton * btn;
	btn = (CButton *)GetDlgItem(IDC_BUTTON_GRPOVERSIGT_RET);
	btn->EnableWindow(FALSE);
}

void CGruppeOversigtForm::OnButtonGrpoversigtSlet() 
{
	try {
		UpdateData();

		int sel = m_grupper.GetCurSel();
		if (-1 == sel || NULL == m_curGruppe)
			return;
		
		
		sel = m_grupper.FindString(-1, CString((char*)m_curGruppe->Navn));
		m_grupper.DeleteString(sel);
		m_medlemmer.ResetContent();

		m_curGruppe->Slet();
		m_curGruppe = NULL;

		UpdateData(FALSE);
	} catch (...) {
		MessageBox(CEBASAppApp::gpEbas->LastError);
	}
}
